package tdh.xt.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Repository;
import tdh.xt.conditional.MybatisCondition;
import tdh.xt.entity.po.User;
import tdh.xt.entity.vo.Page;

import java.util.List;
import java.util.Map;

/*
 * @Package tdh.xt.dao
 * @Description UserDao接口，其中Mybatis由xml实现，Hibernate实现在tdh.xt.dao.hibernate下
 * @Author RicarAN
 * @Date 2021/6/15 16:18
 * @Copyright (c) 2021,南京通达海科技股份有限公司 All Rights Reserved.
 * @Version 1.0
 * Modification History:
 * Date                  Author      Version     Description
 * ------------------------------------------------------------------
 * 2021/6/15 16:18       RicarAN      1.0        DepartDao接口，其中Mybatis由xml实现，Hibernate实现在tdh.xt.dao.hibernate下
 *
 */
@Repository("userDao")
@Conditional(MybatisCondition.class)
public interface UserDao {

    /*
     * @description 根据用户id查询用户
     * @param yhid 用户id
     * @return tdh.xt.entity.po.User 查询到的用户，未查询到返回null
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:20
     */
    User getUserByYhid(String yhid);

    /*
     * @description 根据用户id或用户姓名查找用户，用户姓名采用模糊查询
     * @param yhidOrYhxm 用户id或用户姓名
     * @param page       分页信息
     * @return java.util.List<tdh.xt.entity.po.User> 分页后的用户列表数据
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:21
     */
    List<User> getUsersByYhidOrYhxm(@Param("yhidOrYhxm") String yhidOrYhxm, @Param("page") Page page);

    /*
     * @description 根据用户代码删除用户
     * @param yhdm 用户代码
     * @return int 影响的行数
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:22
     */
    int deleteByYhdm(String yhdm);

    /*
     * @description 通过部门代码获取用户
     * @param bmdm 部门代码
     * @param page 分页信息
     * @return java.util.List<tdh.xt.entity.po.User> 分页后的用户列表数据
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:22
     */
    List<User> getUsersByBmdm(@Param("bmdm") String bmdm, @Param("page") Page page);

    /*
     * @description 根据用户代码查找用户
     * @param yhdm 用户代码
     * @return tdh.xt.entity.po.User 用户信息，为空返回null
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:23
     */
    User getUserByYhdm(String yhdm);

    /*
     * @description 插入用户
     * @param user 待插入的用户
     * @return int 影响的行数
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:23
     */
    int insert(User user);

    /*
     * @description 通过用户代码更新用户
     * @param user 用户
     * @return int 影响的行数
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:24
     */
    int updateByYhdm(User user);

    /*
     * @description 获取所有用户列表分页后的数据
     * @param page 分页信息
     * @return java.util.List<tdh.xt.entity.po.User> 分页好的数据
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:24
     */
    List<User> getUserList(@Param("page") Page page);

    /*
     * @description 获得数据库中总条数
     * @param pageSize 分页大小
     * @param map      查询条件
     * @return int 指定查询条件下的总条数
     * @author RicarAN
     * @version 1.0
     * @date 2021/6/15 16:25
     */
    int getTotalPageCount(@Param("pageSize") Integer pageSize, @Param("map") Map<String, Object> map);
}
